//从axios框架导入axios组件
import axios from "axios";
import {getTokenKey, messageConfirm, messageTip, removeToken} from "../util/util.js";



//定义后端接口地址的前缀
axios.defaults.baseURL = "http://localhost:8080";

// 查找
export function doGet(url, params) {
    return axios({
        method: "get",
        url: url,
        params: params, //{name: "对的", age: 22},
        dataType:"json"
    })
}

// 增加
export function doPost(url, data) {
    return axios({
        method: "post",
        url: url,
        data: data,
        dataType: "json"
    })
}

// 修改
export function doPut(url, data) {
    return axios({
        method: "put",
        url: url,
        data: data, //{name:"好的呢", age: 22},
        dataType: "json"
    })
}

// 删除
export function doDelete(url, params) {
    return axios({
        method: "delete",
        url: url,
        params: params, //{name: "对的", age: 22},
        dataType:"json"
    })
}

// axios请求拦截器
axios.interceptors.request.use(config => {
    // 判断localStorage和sessionStorage是否有token
    let token = window.sessionStorage.getItem("token");
    if (!token) {
        token=window.localStorage.getItem("token");
    }
    // 有token，请求携带token
    if (token) {
        // 在请求头中添加Authorization字段
        config.headers['Authorization'] = token;
    }
    // 返回配置对象，以便axios能够继续发送请求
    return config;
}, error => {
    // 对请求错误做些什么（可选）
    return Promise.reject(error);
});

// 添加响应拦截器
axios.interceptors.response.use( (response) => {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么，拦截token验证的结果，进行相应的提示和页面跳转
    if (response.data.code === 900) { //code大于900说明是token验证未通过
        //给前端用户提示，并且跳转页面
        messageConfirm(response.data.msg + "，无法操作，请重新登录！").then(() => { //用户点击“确定”按钮就会触发then函数
            removeToken();
            //跳到登录页
            window.location.href = "/";  // 路由到登录页面
        }).catch(() => { //用户点击“取消”按钮就会触发catch函数
            window.location.href = "/dashboard"
        })
        return ;
    }
    return response;
}, function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error);
});
